<?php
namespace app\recode\controller;
use \app\check\controller\Check;
use think\Db;
// 星盘档案管理控制器
class Recode extends Check
{
    /**
     * 添加档案
     */
    public function add()
    {
        $name = htmlspecialchars(input('name'));// 档案名称
        $type = (input('type/d',2));// 档案类型  1男 | 2 女 | 3 男同 | 4 女同 | 5 事件 | 6 卜卦
        $year = (input('year/d',1990));// 出生时间-年
        $month = (int)(input('month'));// 出生时间-月
        $day = (int)(input('day'));// 出生时间-日
        $hour = (int)(input('hour'));// 出生时间-时
        $minute = (int)(input('minute'));// 出生时间-分
        $timezone = (int)(input('timezone'));// 出生时间-时区
        $birth_country = htmlspecialchars(input('birth_country'));// 出生地点-省
        $birth_province = htmlspecialchars(input('birth_province'));// 出生地点-市
        $birth_city = htmlspecialchars(input('birth_city'));// 出生地点-区
        $live_country = htmlspecialchars(input('live_country'));// 现居地-省
        $live_province = htmlspecialchars(input('live_province'));// 现居地-省
        $live_city = htmlspecialchars(input('live_city'));// 现居地-省
        $comments = htmlspecialchars(input('comments'));// 档案标签如 自己 朋友 案例
        $isself = (int)(input('isself'));// 档案是否为自己 0 否 | 1 是（自己的档案无法删除，无法更改为其他标签）
        $long_deg = (int)(input('long_deg'));// 经度-度
        $long_min = (int)(input('long_min'));// 经度-分
        $ew = (int)(input('ew'));// 东经|西经 1|-1
        $lat_deg = (int)(input('lat_deg'));// 纬度-度
        $lat_min = (int)(input('lat_min'));// 纬度-分
        $ns = (int)(input('ns'));// 南纬北纬  1|-1
        $avatar = htmlspecialchars(input('avatar'));// 头像地址
        $is_summer = (int)(input('is_summer'));// 是否开启夏令时
        $uid = $this->user['id'];
        $data = [
            'uid' => $uid,
            'name' => $name,
            'type' => $type,
            'year' => $year,
            'month' => $month,
            'day' => $day,
            'hour' => $hour,
            'minute' => $minute,
            'timezone' => $timezone,
            'birth_country' => $birth_country,
            'birth_province' => $birth_province,
            'birth_city' => $birth_city,
            'live_country' => $live_country,
            'live_province' => $live_province,
            'live_city' => $live_city,
            'comments' => $comments,
            'isself' => $isself,
            'long_deg' => $long_deg,
            'long_min' => $long_min,
            'ew' => $ew,
            'lat_deg' => $lat_deg,
            'lat_min' => $lat_min,
            'ns' => $ns,
            'avatar' => $avatar,
            'is_summer' => $is_summer,
        ];

        // 查询是否为自己
        if (($comments == '自己' || $isself == 1) && $this->isself($uid))
            return json(['code' => 10303, 'msg' => "Can't add more recode for your self."]);

        $time = time();
        $Astro = new \app\astro\controller\Index();
        $longitude = ($long_deg + $long_min / 60) * $ew;
        $latitude = ($lat_deg + $lat_min / 60) * $ns;
        // 查询当前星盘日月水金火木土等星落座落宫存入数据库
        $astro_data = $Astro->getTheRecodeAstro($year, $month, $day, $hour, $minute, $longitude, $latitude, $timezone);

        Check::checkRecodeData($year, $month, $day, $hour, $minute, $timezone);
        if ($name == "" || mb_strlen($name, 'utf8') > 15) return json(['code' => 10727, 'msg' => 'Name Invalid.']);
        if ($long_deg < 0 || $long_deg > 180) return json(['code' => 10723, 'msg' => 'Long_deg Invalid.']);
        if ($long_min < 0 || $long_min > 59) return json(['code' => 10724, 'msg' => 'Long_min Invalid.']);
        if ($lat_deg < 0 || $lat_deg > 90) return json(['code' => 10725, 'msg' => 'Lat_deg Invalid.']);
        if ($lat_min < 0 || $lat_min > 59) return json(['code' => 10726, 'msg' => 'Lat_min Invalid.']);
        if ($ew != 1 && $ew != -1) return json(['code' => 10728, 'msg' => 'Ew Invalid.']);
        if ($ns != 1 && $ns != -1) return json(['code' => 10729, 'msg' => 'Ns Invalid.']);

        $rid = Db::table('app_recode')->insertGetId($data);// 返回自增id

        if ($data['comments'] == '自己' || $data['isself'] == 1) {
            Db::table('app_user')->where(['id' => $uid])->update(['has_self_recode' => 1]);// 更新用户已有档案  1
        }

        if (!$rid) return json(['code' => 10301, 'msg' => Db::table('app_recode')->getError()]);

        $astro_data['rid'] = $rid;
        $astro_data['create_time'] = $time;

        Db::table('app_recode_info')->insertGetId(['rid' => $rid, 'create_time' => $time, 'last_time' => $time]);// 新增当前档案访问数据

        $aid = Db::table('app_recode_astro')->insertGetId($astro_data);// 新增当前档案行星数据

        $data['id'] = $rid;

        Db::table('app_recode')->where(['id' => $rid])->update(['aid' => $aid]);// 更新aid字段

        return json(['code' => 200, 'data' => array_merge($data, $astro_data), 'msg' => 'ok']);
    }

    /**
     * 编辑档案
     * 名人星案审核通过无法编辑
     */
    public function edit()
    {
        $id = (int)(input('id'));// 档案id
        $name = htmlspecialchars(input('name'));// 档案名称
        $type = (int)(input('type'));// 档案类型  1男 | 2 女 | 3 男同 | 4 女同 | 5 事件 | 6 卜卦
        $year = (int)(input('year'));// 出生时间-年
        $month = (int)(input('month'));// 出生时间-月
        $day = (int)(input('day'));// 出生时间-日
        $hour = (int)(input('hour'));// 出生时间-时
        $minute = (int)(input('minute'));// 出生时间-分
        $timezone = (int)(input('timezone'));// 出生时间-时区
        $birth_country = htmlspecialchars(input('birth_country'));// 出生地点-省
        $birth_province = htmlspecialchars(input('birth_province'));// 出生地点-市
        $birth_city = htmlspecialchars(input('birth_city'));// 出生地点-区
        $live_country = htmlspecialchars(input('live_country'));// 现居地-省
        $live_province = htmlspecialchars(input('live_province'));// 现居地-省
        $live_city = htmlspecialchars(input('live_city'));// 现居地-省
        $comments = htmlspecialchars(input('comments'));// 档案标签如 自己 朋友 案例
        $isself = (int)(input('isself'));// 档案是否为自己 0 否 | 1 是（自己的档案无法删除，无法更改为其他标签）
        $long_deg = (int)(input('long_deg'));// 经度-度
        $long_min = (int)(input('long_min'));// 经度-分
        $ew = (int)(input('ew'));// 东经|西经 1|-1
        $lat_deg = (int)(input('lat_deg'));// 纬度-度
        $lat_min = (int)(input('lat_min'));// 纬度-分
        $ns = (int)(input('ns'));// 南纬北纬  1|-1
        $avatar = htmlspecialchars(input('avatar'));// 头像地址
        $is_summer = (int)(input('is_summer'));// 是否开启夏令时
        $uid = $this->user['id'];
        $data = [
            'id' => $id,
            'uid' => $uid,
            'name' => $name,
            'type' => $type,
            'year' => $year,
            'month' => $month,
            'day' => $day,
            'hour' => $hour,
            'minute' => $minute,
            'timezone' => $timezone,
            'birth_country' => $birth_country,
            'birth_province' => $birth_province,
            'birth_city' => $birth_city,
            'live_country' => $live_country,
            'live_province' => $live_province,
            'live_city' => $live_city,
            'comments' => $comments,
            'isself' => $isself,
            'long_deg' => $long_deg,
            'long_min' => $long_min,
            'ew' => $ew,
            'lat_deg' => $lat_deg,
            'lat_min' => $lat_min,
            'ns' => $ns,
            'avatar' => $avatar,
            'is_summer' => $is_summer,
        ];

        // 查询是否为自己
        if (($comments == '自己' || $isself == 1) && $this->isself($uid, $id))
            return json(['code' => 10303, 'msg' => "Can't add more recode for your self."]);

        Check::checkRecodeData($year, $month, $day, $hour, $minute, $timezone);
        if (!$id) return json(['code' => 10713, 'msg' => 'Id Invalid.']);
        if ($name == "" || mb_strlen($name, 'utf8') > 15) return json(['code' => 10727, 'msg' => 'Name Invalid.']);
        if ($long_deg < 0 || $long_deg > 180) return json(['code' => 10723, 'msg' => 'Long_deg Invalid.']);
        if ($long_min < 0 || $long_min > 59) return json(['code' => 10724, 'msg' => 'Long_min Invalid.']);
        if ($lat_deg < 0 || $lat_deg > 90) return json(['code' => 10725, 'msg' => 'Lat_deg Invalid.']);
        if ($lat_min < 0 || $lat_min > 59) return json(['code' => 10726, 'msg' => 'Lat_min Invalid.']);
        if ($ew != 1 && $ew != -1) return json(['code' => 10728, 'msg' => 'Ew Invalid.']);
        if ($ns != 1 && $ns != -1) return json(['code' => 10729, 'msg' => 'Ns Invalid.']);


        $recode_old = Db::table('app_recode')->where(['id' => $id, 'uid' => $uid])->find();
        if (empty($recode_old)) {
            return json(['code' => 10304, 'msg' => 'Recode ins not exist.']);
        }

        $Astro = new \app\astro\controller\Index();
        $longitude = ($long_deg + $long_min / 60) * $ew;
        $latitude = ($lat_deg + $lat_min / 60) * $ns;
        // 查询当前星盘日月水金火木土等星落座落宫存入数据库
        $astro_data = $Astro->getTheRecodeAstro($year, $month, $day, $hour, $minute, $longitude, $latitude, $timezone);

        $result = Db::table('app_recode')->update($data);

        if ($result === false) return json(['code' => 10305, 'msg' => Db::table('app_recode')->getError()]);

        Db::table('app_recode_astro')->where(['id' => $recode_old['aid']])->update($astro_data);// 更新档案行星数据

        return json(['code' => 200, 'data' => array_merge($data, $astro_data), 'msg' => 'ok']);
    }
}
